17-4 H洇峇D

本節將以 MATLAB 8.5 來介紹如何以圖形介面來進行程式除錯。MATLAB 其它舊版的程式除錯功能很類似,唯一不同的是圖形介面的外觀,這些功能相同但外觀不同的圖形介面,將統一於本節最後介紹。

在 PC 或 Mac 平台上,MATLAB 的程式編輯器事實上就是除錯器,欲進行除錯,可由指令列直接下達 edit 指令,例如欲對 recipsum1.m 進行除錯,可輸入如下:

>> edit recipsum1

上述指令可開啟 MATLAB 除錯器(也是編輯器),如下:

在此除錯器的上方,包含了一系列的除錯圖示,特別是在「Breakpoints」圖示之下,包含了一些對於中斷點的控制,截圖如下:

可列表說明如下:

說明文字功能
Clear All清除在所有檔案的所有中斷點
Set/Clear在目前列進行中斷點的設定或清除
Enable/Disable啟動或取消目前列的中斷點
Set Condition設定或修改中斷點的啟動條件
Stop on Errors中斷於錯誤發生之處
Stop on Warnings中斷於警告發生之處

舉例來說,欲設立中斷點於 reciproc 次函數的第一列,可利用滑鼠將游標置於該列並點取「Breakpoints」之下的「Set/Clear」 圖示,即可設定中斷點,此時該列之前會顯示一紅點,代表中斷點,見下圖:

Hint
也可以直接按下「F12」來設定或取消目前列的中斷點。

此時若執行此函數,即可停於該中斷點:

>> recipsum1([1 2 3])

MATLAB 除錯器會以綠色箭號顯示現在所在的位置:

此時您可以在指令列檢視各個變數或運算式的值,有兩個方法可以達成:

  1. 在 MATLAB 指令列輸入變數或運算式。
  2. 選取變數或運算式後,利用滑鼠右鍵點取,並選擇「Evaluate Selection」(或按下「F9」)。

如果你想檢視不同工作空間的變數,可以先選取工具列上的「Function Call Stack」 下拉式選單,以跳至不同的工作空間,然後在依照上述方法來檢視變數或運算式的值。

當程式停在中斷點時,我們可以按下「Step」圖示(或在指令列輸入 dbstep)來進行逐步執行,此時綠色箭號變成向下,代表即將離開此列:

再按「Step」圖示(或於指令列輸入 dbstep)數次,即可完成整個函數的逐步執行。如果在中途要退出除錯模式,也可以直接點選「Quit Debugging」圖示(或在命令列輸入「dbquit」)。

Hint
當程式停在中斷點時,上方選單區即會切換並顯示適合的圖示以供選取,例如 Continue、Step、Step In、Step Out、Run to Cursor、Function Call Stack、Quit Debugging 等。

另一個除錯時常見的窘況,就是在發生錯誤的那一瞬間,MATLAB 會立刻跳回基本工作空間,導致我們無法檢查在錯誤發生時的各種變數或運算式的值。如同上一節所述,要對付這個情況,其實很簡單,只要在程式執行前,先在命令列輸入「dbstop if error」,之後再執行程式。此時若有任何錯誤發生,MATLAB 即會開啟編輯器並停在錯誤發生的位置,同時命令列的提示文字也改成「K>>」,代表目前是停在錯誤發生的工作空間中,所以你可以逐一檢查所有變數或運算式,以抓出錯誤發生的原因並進行修改。

若使用 GUI 來完成上述工作,你只要在除錯器先點選「Breakpoints」之下的「Stop on Errors」,然後在命令列執行程式碼,即可讓程式停在錯誤發生的那一瞬間,以便進行除錯。


MATLAB程式設計:入門篇